Wilfrid Cariou, Nantes, le 22 mai 2017, BY-NC-SA

Les packages dplyr et tidyr

Dplyr : une grammaire de manipulation des données

  • Version: 0.5.0 (29 Août 2016)
  • Date de création : janvier 2014
  • Auteurs : Hadley Wickham & Romain Francois.

Dplyr : une grammaire de manipulation des données

"Dplyr est une bibliothèque conçue pour simplifier les tâches de traitement de données quotidiennes portant sur des tableaux de données, à la fois en mémoire et hors-mémoire".

  • R :
    • data frames (et tbl_df)
  • :
    • SQLite
    • PostgreSQL
    • MySQL/MariaDB
    • Bigquery

Tidyr : mise en ordre simple de données avec les fonctions spread() et gather()

  • Version 0.6.2 (mai 2017)
  • Date de création : juillet 2014
  • Auteur: Hadley Wickham

" Une évolution du package 'reshape2' conçue pour pour la mise en ordre des données et fonctionnant avec les "pipes" de dplyr".

Principales fonctions de manipulation de tables uniques

  • Transpositions tableaux larges / longs (gather, spread)
  • Division et combinaison de cellules (separate, unique)
  • Gestion des valeurs manquantes (drop_na, fill, replace_na)

Principales fonctions de manipulation de tables uniques

  • Sélection de colonnes (select)
  • Filtrage de lignes (filter)
  • Groupements (group by)
  • Résumés de données (summarise)
  • Construction de nouvelles variables (mutate)
  • Tri des valeurs (arrange)

tidyr : principales fonctions de manipulation multi-tables

  • Combinaisons de colonnes (bind_rows, fonctions de jointure (ex: inner_join))
  • Combinaisons de lignes (bind_cols)

Aide-mémoire

Remaniement des données avec dplyr et tidyr (janvier 2015)

Aide-mémoire

Remaniement des données avec dplyr et tidyr (janvier 2015)

Aide-mémoire

Importation des données avec readr, dplyr et tidyr (Janvier 2017)

L'opérateur %>% comme élément majeur de la grammaire de dplyr

Dplyr 0.2 (mai 2014, package magrittr)

L'objet situé à gauche de l'opérateur %>% est utilisé comme premier argument de la fonction située à droite de l'opérateur.

filter(voyages, ptdepimp =="Nantes")
voyages %>% filter(ptdepimp =="Nantes")

Enchaîner les opérations de manipulation des données

avec l'opérateur %>%

voyages %>% 
  filter(ptdepimp =="Nantes") %>%
  count(yearam) %>%
  select(1:5) # %>% etc...

Le piping operator peut être lu comme "ensuite" ou "puis".

Afin d'aborder les bases de la manipulation des données, nous utiliserons un jeu de données issu de la base The Trans-Atlantic Slave Trade Database.

"La base de données The Trans-Atlantic Slave Trade Database renferme des informations sur près de 36 000 expéditions de traite qui ont embarqué de force plus de 10 millions d'Africains à destination des Amériques entre le seizième et le dix-neuvième siècles."

Voyages, The Trans-Atlantic Slave Trade Database,
Repéré à http://slavevoyages.org/

La TastDb dans l'espace public

  • Fin des années 1960 :
    Travail de dépouillement et de "mise en ordinateur" de sources inédites portant sur les expéditions de traite par l'historien Américain Herbert S. Klein.
  • Fin des années 1980 :
    Environ 11 000 enregistrements d’expéditions de traite trans-atlantique sont stockés dans 16 ensembles de données distincts.
  • Années 90 :
    Projet de création d'un jeu de données unique par les historiens David Eltis et Stephen Behrendt.
    • Recoupement des données mentionnées dans plusieurs séries.
    • Ajout de nouvelles informations.

  • 1999, The Trans-Atlantic Slave Trade Database (Voyages dataset) :
    - 27 233 expéditions.
    - Publication sur cédérom

  • 2010, The Trans-Atlantic Slave Trade Database (Voyages dataset) :
    • 34 946 expéditions.
    • 105 variables.
    • Interrogeable en ligne / téléchargeable (spss, csv).
    • Données relatives aux événements et lieux directement exploitables.
  • 2016, Trans-Atlantic Slave Trade Database (expanded data set) :
    • 35 938 expéditions.
    • 278 variables.
    • téléchargeable (spss).
    • Codage de plusieurs variables (livret spss codebook)

Mise en ligne

" La mise en ligne est l'occasion pour les chercheurs du monde entier de poursuivre leurs contributions et de corriger les erreurs qu'ils pourraient trouver."

Emory University http://slavevoyages.org/

Des données structurées en sept ensembles

Navires, pavillons, armateurs

L'issue des expéditions (outcomes)

## Observations: 34,946
## Variables: 5
## $ fate       <chr> "Sold slaves in Americas - subsequent fate unknown"...
## $ fate2      <chr> "Slaves disembarked in Americas", "Slaves disembark...
## $ fate3      <chr> "Not captured", "Not captured", "Not captured", "No...
## $ fate4      <chr> "Delivered slaves for original owners", "Delivered ...
## $ resistance <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...

Itinéraire

## Observations: 34,946
## Variables: 20
## $ ptdepimp   <chr> "Rio de Janeiro", "Bahia, port unspecified", "Bahia...
## $ plac1tra   <chr> "Mozambique", "Mozambique", "Cabinda", "Quilimane",...
## $ plac2tra   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ plac3tra   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ mjbyptimp  <chr> "Mozambique", "Mozambique", "Cabinda", "Quilimane",...
## $ npafttra   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ sla1port   <chr> "Bahia, port unspecified", "Bahia, port unspecified...
## $ adpsale1   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ adpsale2   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ mjslptimp  <chr> "Bahia, port unspecified", "Bahia, port unspecified...
## $ portret    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ deptregimp <chr> "Southeast Brazil", "Bahia", "Bahia", "Bahia", "Bah...
## $ regem1     <chr> "Southeast Africa and Indian Ocean islands", "South...
## $ regem2     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ regem3     <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ majbyimp   <chr> "Southeast Africa and Indian Ocean islands", "South...
## $ regdis1    <chr> "Bahia", "Bahia", "Bahia", "Bahia", "Bahia", "Bahia...
## $ regdis2    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ regdis3    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,...
## $ mjselimp   <chr> "Bahia", "Bahia", "Bahia", "Bahia", "Bahia", "Bahia...

Données temporelles

## Observations: 34,946
## Variables: 7
## $ yearam      <int> 1817, 1817, 1817, 1817, 1817, 1817, 1817, 1817, 18...
## $ datedep     <date> 1816-08-04, 1816-07-11, 1816-09-19, 1816-07-06, N...
## $ datebuy     <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ dateleftafr <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ dateland1   <date> 1817-01-16, 1817-01-17, 1817-01-17, 1817-02-27, 1...
## $ datedepam   <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ dateend     <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...

Equipage

## Observations: 34,946
## Variables: 10
## $ captaina <chr> "Dias, Manoel José", "Mata, José Maria da", "Ferreira...
## $ captainb <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ captainc <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ crew1    <int> NA, 30, 28, NA, NA, NA, NA, NA, NA, 29, NA, 22, NA, 3...
## $ crew3    <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ crewdied <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ slintend <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ ncar13   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ ncar15   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ ncar17   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...

Esclaves

## Observations: 34,946
## Variables: 15
## $ slaximp  <int> 404, 246, 405, 381, 578, 557, 234, 413, 368, 481, 195...
## $ slaarriv <int> 290, 223, 350, 342, 516, 515, 204, 374, 345, 478, 180...
## $ slas32   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ slas36   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ slas39   <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ slamimp  <int> 290, 223, 350, 342, 516, 515, 204, 374, 345, 478, 180...
## $ menrat7  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ womrat7  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ boyrat7  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ girlrat7 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ malrat7  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ chilrat7 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ jamcaspr <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N...
## $ vymrtimp <int> 114, NA, 55, 39, NA, NA, NA, NA, 23, 3, NA, 138, NA, ...
## $ vymrtrat <dbl> 0.28217800, NA, 0.13580200, 0.10236200, NA, NA, NA, N...

Sources

## Observations: 34,946
## Variables: 18
## $ sourcea <chr> "PP,1845,XLIX:593-633", "PP,1845,XLIX:593-633", "PP,18...
## $ sourceb <chr> "IDO,1817.02.07.", "IDO,1817.02.07.", "IDO,1817.02.07....
## $ sourcec <chr> "GRJ,07/08/1816", "AHMS, 27,4, p.63", "AHMS, 27.2, p. ...
## $ sourced <chr> "CapelaNotes", NA, NA, "AHU,Moçambique,Cx 151 No 91", ...
## $ sourcee <chr> "AHU,Moçambique,Cx 151 No 108", NA, NA, NA, NA, NA, NA...
## $ sourcef <chr> NA, NA, NA, NA, NA, NA, NA, "IDO, 12/08/1817", NA, NA,...
## $ sourceg <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourceh <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcei <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcej <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcek <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcel <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcem <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcen <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourceo <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcep <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourceq <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...
## $ sourcer <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA...

Les données spatiales

Lieux de la traite

Port de départs

Exemples de manipulations de la base Voyages

Sélection de colonnes

dplyr

Sélection d'une colonne

repérée par son nom

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(shipname)
## # A tibble: 5 x 1
##              shipname
##                 <chr>
## 1     Duc de Bretagne
## 2               César
## 3     Duc de Bretagne
## 4   Duc de Luxembourg
## 5 Saint-Jean Baptiste

Sélection d'une colonne

repérée par sa position

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(5) 
## # A tibble: 5 x 1
##              shipname
##                 <chr>
## 1     Duc de Bretagne
## 2               César
## 3     Duc de Bretagne
## 4   Duc de Luxembourg
## 5 Saint-Jean Baptiste

Sélections multiples

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(1, 3, shipname)  
## # A tibble: 5 x 3
##   voyageid yearam            shipname
##      <int>  <int>               <chr>
## 1    30002   1709     Duc de Bretagne
## 2    30003   1709               César
## 3    30015   1711     Duc de Bretagne
## 4    32465   1719   Duc de Luxembourg
## 5    33748   1686 Saint-Jean Baptiste

Sélection de colonnes contigues

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(2:4)  
## # A tibble: 5 x 3
##   slaximp yearam ptdepimp
##     <int>  <int>    <chr>
## 1     592   1709   Nantes
## 2     275   1709   Nantes
## 3     316   1711   Nantes
## 4     105   1719 Le Havre
## 5     105   1686 Bordeaux

Sélection par exclusion

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(-2)  
## # A tibble: 5 x 4
##   voyageid yearam ptdepimp            shipname
##      <int>  <int>    <chr>               <chr>
## 1    30002   1709   Nantes     Duc de Bretagne
## 2    30003   1709   Nantes               César
## 3    30015   1711   Nantes     Duc de Bretagne
## 4    32465   1719 Le Havre   Duc de Luxembourg
## 5    33748   1686 Bordeaux Saint-Jean Baptiste

Ré-agencement des colonnes

dplyr

Ré-agencement des colonnes

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(shipname, ptdepimp, voyageid, yearam, slaximp)  
## # A tibble: 5 x 5
##              shipname ptdepimp voyageid yearam slaximp
##                 <chr>    <chr>    <int>  <int>   <int>
## 1     Duc de Bretagne   Nantes    30002   1709     592
## 2               César   Nantes    30003   1709     275
## 3     Duc de Bretagne   Nantes    30015   1711     316
## 4   Duc de Luxembourg Le Havre    32465   1719     105
## 5 Saint-Jean Baptiste Bordeaux    33748   1686     105

Ré-agencement des colonnes

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(4, 3, 2, 1, 5) 
## # A tibble: 5 x 5
##   ptdepimp yearam slaximp voyageid            shipname
##      <chr>  <int>   <int>    <int>               <chr>
## 1   Nantes   1709     592    30002     Duc de Bretagne
## 2   Nantes   1709     275    30003               César
## 3   Nantes   1711     316    30015     Duc de Bretagne
## 4 Le Havre   1719     105    32465   Duc de Luxembourg
## 5 Bordeaux   1686     105    33748 Saint-Jean Baptiste

Ré-agencement des colonnes

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  select(yearam, 1:5) 
## # A tibble: 5 x 5
##   yearam voyageid slaximp ptdepimp            shipname
##    <int>    <int>   <int>    <chr>               <chr>
## 1   1709    30002     592   Nantes     Duc de Bretagne
## 2   1709    30003     275   Nantes               César
## 3   1711    30015     316   Nantes     Duc de Bretagne
## 4   1719    32465     105 Le Havre   Duc de Luxembourg
## 5   1686    33748     105 Bordeaux Saint-Jean Baptiste

Fonctions assistantes

Aide-mémoire "Remaniement des données avec dplyr et tidyr", RStudio, 2015

Tri de valeurs

dplyr

Tri de valeurs

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  arrange(yearam) 
## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    33748     105   1686 Bordeaux Saint-Jean Baptiste
## 2    30002     592   1709   Nantes     Duc de Bretagne
## 3    30003     275   1709   Nantes               César
## 4    30015     316   1711   Nantes     Duc de Bretagne
## 5    32465     105   1719 Le Havre   Duc de Luxembourg

Tri de valeurs

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  arrange(desc(slaximp)) # première écriture (desc)
demo <- dataset %>%
  arrange(-slaximp) # seconde écriture (signe moins)
## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30015     316   1711   Nantes     Duc de Bretagne
## 3    30003     275   1709   Nantes               César
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste

Transposition format large / format long

tidyr

Transposition format large / format long

betsey_ship
## # A tibble: 15 x 5
##    voyageid yearam shipname           captaina            captainb
##       <int>  <int>    <chr>              <chr>               <chr>
##  1    17359   1755   Betsey     Venes, William    Mctaggart, James
##  2    17612   1766   Betsey     Jones, William            Matthews
##  3    17638   1767   Betsey     Maxwell, Basil      Chilcott, John
##  4    36689   1799   Betsey   Woodman, Richard    Williams, Daniel
##  5    36723   1800   Betsey       Whitney, Dan             Baleman
##  6    75145   1775   Betsey   Haycraft, Samuel            Good, Js
##  7    77067   1773   Betsey     Barber, Robert                Aird
##  8    80514   1789   Betsey      Forbes, James       Campion, John
##  9    80518   1793   Betsey     Doyle, William       Kent, Richard
## 10    80520   1796   Betsey   Armstrong, David      Mosson, Edward
## 11    90530   1755   Betsey Jenkinson, Charles     Sechverall, Sam
## 12    91178   1766   Betsey      Cooke, Elliot    Millroy, William
## 13    91445   1770   Betsey     Conway, Samuel           Parkinson
## 14    91530   1770   Betsey     Babcock, Elias       Cawson, David
## 15    91845   1772   Betsey     Conway, Samuel Stephenson, William

Transposition format large / format long

demo <- betsey_ship %>%
  gather(captaina, captainb, key="statut", value="captain") %>%
  arrange(captain)
## # A tibble: 30 x 5
##    voyageid yearam shipname   statut          captain
##       <int>  <int>    <chr>    <chr>            <chr>
##  1    77067   1773   Betsey captainb             Aird
##  2    80520   1796   Betsey captaina Armstrong, David
##  3    91530   1770   Betsey captaina   Babcock, Elias
##  4    36723   1800   Betsey captainb          Baleman
##  5    77067   1773   Betsey captaina   Barber, Robert
##  6    80514   1789   Betsey captainb    Campion, John
##  7    91530   1770   Betsey captainb    Cawson, David
##  8    17638   1767   Betsey captainb   Chilcott, John
##  9    91445   1770   Betsey captaina   Conway, Samuel
## 10    91845   1772   Betsey captaina   Conway, Samuel
## # ... with 20 more rows

Sélection de lignes en fonction d'une colonne

dplyr

Sélections portant sur des données textuelles

Sélection selon une chaîne de caractères

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter (ptdepimp == "Nantes") 
## # A tibble: 3 x 5
##   voyageid slaximp yearam ptdepimp        shipname
##      <int>   <int>  <int>    <chr>           <chr>
## 1    30002     592   1709   Nantes Duc de Bretagne
## 2    30003     275   1709   Nantes           César
## 3    30015     316   1711   Nantes Duc de Bretagne

Sélection selon plusieurs chaînes de caractères

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter (ptdepimp == "Nantes" | ptdepimp =="Bordeaux") 
## # A tibble: 4 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    33748     105   1686 Bordeaux Saint-Jean Baptiste

Sélection selon une séquence de caractères

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter(grepl("Duc", shipname))
## # A tibble: 3 x 5
##   voyageid slaximp yearam ptdepimp          shipname
##      <int>   <int>  <int>    <chr>             <chr>
## 1    30002     592   1709   Nantes   Duc de Bretagne
## 2    30015     316   1711   Nantes   Duc de Bretagne
## 3    32465     105   1719 Le Havre Duc de Luxembourg

Sélection par exclusion d'une chaîne de caractères

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter (!ptdepimp == "Nantes") 
## # A tibble: 2 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    32465     105   1719 Le Havre   Duc de Luxembourg
## 2    33748     105   1686 Bordeaux Saint-Jean Baptiste

Sélection par exclusion d'une séquence de caractères

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter(!grepl("Bretagne", shipname)) 
## # A tibble: 3 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30003     275   1709   Nantes               César
## 2    32465     105   1719 Le Havre   Duc de Luxembourg
## 3    33748     105   1686 Bordeaux Saint-Jean Baptiste

Sélections portant sur des valeurs numériques

Sélection selon une valeur numérique

Sélection selon une valeur numérique

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter(yearam == 1709) 
## # A tibble: 2 x 5
##   voyageid slaximp yearam ptdepimp        shipname
##      <int>   <int>  <int>    <chr>           <chr>
## 1    30002     592   1709   Nantes Duc de Bretagne
## 2    30003     275   1709   Nantes           César

Sélection selon un intervalle de valeurs

demo <- dataset %>%
  filter(slaximp >= 100 & slaximp <= 300) 
## # A tibble: 3 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30003     275   1709   Nantes               César
## 2    32465     105   1719 Le Havre   Duc de Luxembourg
## 3    33748     105   1686 Bordeaux Saint-Jean Baptiste

Sélection de lignes en fonction d'un vecteur

chantier <- c("Brest", "Paimboeuf", "Quimper")

liste_chantiers <- voyages %>%
  filter(placcons %in% chantier) 
## # A tibble: 16 x 105
##    voyageid               shipname natinimp  placcons yrcons placreg yrreg
##       <int>                  <chr>    <chr>     <chr>  <int>   <chr> <chr>
##  1      465                Félicie   France Paimboeuf   1824  Nantes  <NA>
##  2     2336                 Eclair   France Paimboeuf   1825  Nantes  <NA>
##  3     2416               Félicité   France Paimboeuf   1824    <NA>  <NA>
##  4     2749              Etincelle   France Paimboeuf   1823    <NA>  <NA>
##  5     2802              Angèlique   France Paimboeuf   1825    <NA>  <NA>
##  6     2823                   Rose   France Paimboeuf   1824    <NA>  <NA>
##  7     2836            Bienfaisant   France Paimboeuf   1816    <NA>  <NA>
##  8     2869            Bonne Aline   France Paimboeuf   1804    <NA>  <NA>
##  9    32881               Diligent   France     Brest   1720    <NA>  <NA>
## 10    32899               Diligent   France     Brest   1720    <NA>  <NA>
## 11    34308                Edouard   France   Quimper   1820    <NA>  <NA>
## 12    34488 Bonne Mère (a) Bluette   France Paimboeuf   1823    <NA>  <NA>
## 13    34495               Clarisse   France Paimboeuf   1824    <NA>  <NA>
## 14    34531               Philippe   France Paimboeuf   1825    <NA>  <NA>
## 15    34532               Philippe   France Paimboeuf   1825    <NA>  <NA>
## 16    34553            Bienfaisant   France Paimboeuf   1816    <NA>  <NA>
## # ... with 98 more variables: rig <chr>, tonnage <int>, tonmod <dbl>,
## #   guns <int>, ownera <chr>, ownerb <chr>, ownerc <chr>, ownerd <chr>,
## #   ownere <chr>, ownerf <chr>, ownerg <chr>, ownerh <chr>, owneri <chr>,
## #   ownerj <chr>, ownerk <chr>, ownerl <chr>, ownerm <chr>, ownern <chr>,
## #   ownero <chr>, ownerp <chr>, fate <chr>, fate2 <chr>, fate3 <chr>,
## #   fate4 <chr>, resistance <chr>, ptdepimp <chr>, plac1tra <chr>,
## #   plac2tra <chr>, plac3tra <chr>, mjbyptimp <chr>, npafttra <chr>,
## #   sla1port <chr>, adpsale1 <chr>, adpsale2 <chr>, mjslptimp <chr>,
## #   portret <chr>, deptregimp <chr>, regem1 <chr>, regem2 <chr>,
## #   regem3 <chr>, majbyimp <chr>, regdis1 <chr>, regdis2 <chr>,
## #   regdis3 <chr>, mjselimp <chr>, retrnreg <chr>, yearam <int>,
## #   datedep <date>, datebuy <date>, dateleftafr <date>, dateland1 <date>,
## #   datedepam <date>, dateend <date>, voy1imp <int>, voy2imp <int>,
## #   captaina <chr>, captainb <chr>, captainc <chr>, crew1 <int>,
## #   crew3 <int>, crewdied <int>, slintend <int>, ncar13 <chr>,
## #   ncar15 <chr>, ncar17 <chr>, slaximp <int>, slaarriv <int>,
## #   slas32 <int>, slas36 <int>, slas39 <int>, slamimp <int>,
## #   menrat7 <dbl>, womrat7 <dbl>, boyrat7 <dbl>, girlrat7 <dbl>,
## #   malrat7 <dbl>, chilrat7 <dbl>, jamcaspr <chr>, vymrtimp <int>,
## #   vymrtrat <dbl>, sourcea <chr>, sourceb <chr>, sourcec <chr>,
## #   sourced <chr>, sourcee <chr>, sourcef <chr>, sourceg <chr>,
## #   sourceh <chr>, sourcei <chr>, sourcej <chr>, sourcek <chr>,
## #   sourcel <chr>, sourcem <chr>, sourcen <chr>, sourceo <chr>,
## #   sourcep <chr>, sourceq <chr>, sourcer <chr>

Sélection de lignes en fonction de plusieurs colonnes

Sélection de lignes en fonction de plusieurs colonnes

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
  filter(slaximp == 100 & ptdepimp == "Bordeaux") 
demo <- dataset %>%
  filter(slaximp == 100) %>%
  filter (ptdepimp == "Bordeaux") 

Résumés de données

dplyr

Liste d'expéditions

navires au départ de Dunkerque

demo <- dataset <- voyages %>%
  filter(ptdepimp=="Dunkerque") %>%
  arrange(shipname) %>%
  select(voyageid, yearam, shipname)
## # A tibble: 20 x 3
##    voyageid yearam            shipname
##       <int>  <int>               <chr>
##  1    34077   1819              Amitié
##  2    31858   1767           Barbançon
##  3   900036   1793            Benjamin
##  4    31870   1776      Comte d'Artois
##  5    31842   1723   Comte de Toulouse
##  6    31862   1766 Comtesse de Brionne
##  7    31866   1769 Comtesse de Brionne
##  8    31876   1784             Coureur
##  9    31875   1784      Dame Elisabeth
## 10    33894   1684           Diligente
## 11    31856   1764      Douce Marianne
## 12    31879   1790       Duc d'Orléans
## 13    31871   1776     Duc de Choiseul
## 14    31853   1764             Épreuve
## 15    31867   1772           Espérance
## 16    31869   1775           Espérance
## 17    31848   1750               Flore
## 18    31873   1778               Flore
## 19    31845   1735             Fortune
## 20    31844   1729   Galère du Détroit

Liste des valeurs uniques

navires au départ de Dunkerque

demo <-  dataset <- voyages %>%
  filter(ptdepimp=="Dunkerque") %>%
  distinct(shipname) %>%
  arrange(shipname)
## # A tibble: 20 x 1
##               shipname
##                  <chr>
##  1              Amitié
##  2           Barbançon
##  3            Benjamin
##  4      Comte d'Artois
##  5   Comte de Toulouse
##  6 Comtesse de Brionne
##  7             Coureur
##  8      Dame Elisabeth
##  9           Diligente
## 10      Douce Marianne
## 11       Duc d'Orléans
## 12     Duc de Choiseul
## 13             Épreuve
## 14           Espérance
## 15               Flore
## 16             Fortune
## 17   Galère du Détroit
## 18          Hirondelle
## 19            Jalousie
## 20             Jupiter

Liste des valeurs uniques

navires au départ de Nantes dont la date de construction est identifiée

demo <- voyages %>%
  filter(ptdepimp=="Nantes") %>%
  drop_na(yrcons) %>%
  distinct(shipname) %>%
  arrange(shipname) %>%
  filter(!grepl("^A[cd]",shipname)) # Débuter à Africain
## # A tibble: 122 x 1
##             shipname
##                <chr>
##  1          Africain
##  2           Aimable
##  3 Aimable Henriette
##  4            Alcide
##  5            Alcyon
##  6            Alfred
##  7             Aline
##  8          Alphonse
##  9        Amériquain
## 10              Amis
## # ... with 112 more rows

Liste de valeurs uniques en fonction de plusieurs colonnes

navires au départ de Nantes dont la date de construction est identifiée

library(tidyr)
demo <- voyages %>%
  filter(ptdepimp=="Nantes") %>%
  drop_na(yrcons) %>%
  distinct(shipname, yrcons) %>%
  arrange(shipname) %>%
  filter(!grepl("^A[cd]",shipname)) # Débuter à Africain
## # A tibble: 131 x 2
##             shipname yrcons
##                <chr>  <int>
##  1          Africain   1824
##  2          Africain   1825
##  3           Aimable   1817
##  4 Aimable Henriette   1815
##  5 Aimable Henriette   1822
##  6 Aimable Henriette   1823
##  7            Alcide   1821
##  8            Alcyon   1825
##  9            Alfred   1825
## 10             Aline   1825
## # ... with 121 more rows

Résumés de position et de dispersion

Résumer une colonne

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
summarise(avg_slaximp = mean(slaximp))
## # A tibble: 1 x 1
##   avg_slaximp
##         <dbl>
## 1       278.6

Appliquer un ensemble de résumés à une colonne

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- dataset %>%
summarise(avg_slaximp = mean(slaximp), sum_slaximp= sum(slaximp))
## # A tibble: 1 x 2
##   avg_slaximp sum_slaximp
##         <dbl>       <int>
## 1       278.6        1393

Appliquer un résumé à un ensemble de colonnes

## # A tibble: 5 x 5
##   voyageid slaximp yearam ptdepimp            shipname
##      <int>   <int>  <int>    <chr>               <chr>
## 1    30002     592   1709   Nantes     Duc de Bretagne
## 2    30003     275   1709   Nantes               César
## 3    30015     316   1711   Nantes     Duc de Bretagne
## 4    32465     105   1719 Le Havre   Duc de Luxembourg
## 5    33748     105   1686 Bordeaux Saint-Jean Baptiste
demo <- voyages %>%
  filter(ptdepimp=="Nantes") %>%
  summarise_each(funs(mean), slaximp, slamimp)
## # A tibble: 1 x 2
##   slaximp slamimp
##     <dbl>   <dbl>
## 1      NA      NA

Appliquer un résumé à un ensemble de colonnes

demo <- voyages %>%
  filter(ptdepimp=="Nantes") %>%
  drop_na(slaximp, slamimp) %>%
summarise_each(funs(mean), slaximp, slamimp)
## # A tibble: 1 x 2
##    slaximp  slamimp
##      <dbl>    <dbl>
## 1 318.2405 273.7321
demo <- voyages %>%
  filter(ptdepimp=="Nantes") %>%
  summarise_each(funs(mean(., na.rm = TRUE)), slaximp, slamimp)
## # A tibble: 1 x 2
##   slaximp  slamimp
##     <dbl>    <dbl>
## 1  317.49 273.7321

Opération sur des groupes de données

Tirage aléatoire portant sur des groupes

library(dplyr)
group_demo1 <- voyages %>%
  select(voyageid, slaximp, yearam, ptdepimp, shipname) %>%
  filter(ptdepimp =="Nantes"| ptdepimp =="Bordeaux" | ptdepimp =="Le Havre") %>%
  group_by(ptdepimp) %>%
  sample_n(3)

Tirage aléatoire portant sur des groupes

## Source: local data frame [9 x 5]
## Groups: ptdepimp [3]
## 
## # A tibble: 9 x 5
##   voyageid slaximp yearam ptdepimp           shipname
##      <int>   <int>  <int>    <chr>              <chr>
## 1    31536     600   1765 Bordeaux            Liberté
## 2    31669     584   1786 Bordeaux              Fanny
## 3    31553     169   1768 Bordeaux           Vaillant
## 4    32724     372   1787 Le Havre     Comte de Mercy
## 5    32487     290   1737 Le Havre             Phénix
## 6    32575     420   1772 Le Havre Princesse d'Angole
## 7    30482     150   1743   Nantes             Aurore
## 8    30778     369   1765   Nantes       Saint Martin
## 9    30941     320   1771   Nantes   Marie Séraphique

Grouper les données

Wickham H. (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software.

Grouper les données

Wickham H. (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software.

group_demo2 <-voyages %>%
  filter(ptdepimp =="Nantes"| ptdepimp =="Bordeaux" | ptdepimp =="Le Havre") %>%
  drop_na(slaximp) %>%
  group_by(ptdepimp) %>%
  summarise(sum_slaximp = sum(slaximp))
## # A tibble: 3 x 2
##   ptdepimp sum_slaximp
##      <chr>       <int>
## 1 Bordeaux      134465
## 2 Le Havre      142503
## 3   Nantes      541638

Grouper les données

Wickham H. (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software.

group_demo3 <-voyages %>%
  filter(ptdepimp =="Nantes"| ptdepimp =="Bordeaux" | ptdepimp =="Le Havre") %>%
  count(ptdepimp)
## # A tibble: 3 x 2
##   ptdepimp     n
##      <chr> <int>
## 1 Bordeaux   443
## 2 Le Havre   452
## 3   Nantes  1732

Création de nouvelles colonnes

Création de nouvelles colonnes

effectifs cumulés croissants d'esclaves embarqués (navires au départ de Dunkerque)

## # A tibble: 45 x 3
##    yearam slaximp slaximp_cumul
##     <int>   <int>         <int>
##  1   1684     316           316
##  2   1685     144           460
##  3   1713     316           776
##  4   1715     262          1038
##  5   1716     270          1308
##  6   1719     211          1519
##  7   1722     237          1756
##  8   1723     386          2142
##  9   1729     191          2333
## 10   1735      96          2429
## # ... with 35 more rows

Création de nouvelles colonnes

tableau croisé

## Source: local data frame [9 x 11]
## Groups: majbyimp [9]
## 
## # A tibble: 9 x 11
##                                    majbyimp `Basse-Terre` `Cap Français`
## *                                     <chr>         <int>          <int>
## 1                            Bight of Benin            NA              1
## 2                                Gold Coast            NA              2
## 3                              Other Africa            NA              2
## 4          Senegambia and offshore Atlantic            NA              1
## 5                              Sierra Leone            NA              1
## 6 Southeast Africa and Indian Ocean islands            NA              1
## 7        West Central Africa and St. Helena            NA              6
## 8                            Windward Coast            NA             NA
## 9                                      <NA>             2              1
## # ... with 8 more variables: `Cuba, port unspecified` <int>, `Martinique,
## #   port unspecified` <int>, `Port-au-Prince` <int>, `Port-de-Paix` <int>,
## #   `Saint-Domingue, port unspecified` <int>, `Saint-Marc` <int>, `Zion
## #   Hill` <int>, `<NA>` <int>